package tt.dz.egobus.servicemanager.bean;

import com.fasterxml.jackson.annotation.JsonIgnore;
import org.springframework.util.Assert;
import tt.dz.egobus.bean.Page;

import java.io.Serializable;
import java.util.List;

/**
 * @author Anson
 * @date 17-4-13
 * @name 设置了从第几个开始，以及每一页的条数
 * </br> 有些方法不能使用
 * @since 1.0.4
 */
public class PagingationStart<T extends Serializable> implements Page {
    private static final long serialVersionUID = 3235747648205774342L;
    private List<T> list; // 要返回的某一页的记录列表
    private int allRow; // 总记录数
    private int offset; //当前第几个开始
    private int pageSize; //当前每页多少条数据

    public PagingationStart() {
    }

    public PagingationStart(int offset, int pageSize) {
        this.offset = offset;
        this.pageSize = pageSize;
    }

    /**
     * 处理当前分页
     */
    @Override
    public void dealPage() {

    }


    /**
     * 计算当前页开始记录
     *
     * @return 当前页开始记录号
     */
    @Override
    public int countOffset() {
        return this.offset;
    }

    /**
     * 设置当前页
     *
     * @param currentPage
     */
    @Override
    @JsonIgnore
    public void setCurrentPage(int currentPage) {
        throw new UnsupportedOperationException("当前不支持设置当前操作");
    }


    /**
     * 设置每页显示多少条
     *
     * @param pageSize
     */
    @Override
    public void setPageSize(int pageSize) {
        Assert.isTrue(pageSize > 0, "每页显示条数小于0");
        this.pageSize = pageSize;
    }


    /**
     * @return 总页数
     */
    @Override
    @JsonIgnore
    public int getTotalPages() {
        return (allRow + pageSize - 1) / pageSize;
    }

    /**
     * @return 首页
     */
    @Override
    public int getTopPageNo() {
        return 1;
    }

    /**
     * @return 上一页
     */
    @Override
    @JsonIgnore
    public int getPreviousPageNo() {
        throw new UnsupportedOperationException("当前不支持设置当前操作");
    }

    /**
     * @return 下一页
     */
    @Override
    @JsonIgnore
    public int getNextPageNo() {
        throw new UnsupportedOperationException("当前不支持设置当前页");
    }

    /**
     * @return 尾页
     */
    @Override
    public int getBottomPageNo() {
        return getTotalPages();
    }

    /**
     * 计算当前页开始记录
     *
     * @param pageSize    每页记录数
     * @param currentPage 当前第几页
     * @return 当前页开始记录号
     */
    private int countOffset(int currentPage, int pageSize) {
        int offset = pageSize * (currentPage - 1);
        return offset;
    }

    @Override
    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }

    public int getAllRow() {
        return allRow;
    }

    public void setAllRow(int allRow) {
        this.allRow = allRow;
    }

    public int getOffset() {
        return offset;
    }

    public void setOffset(int offset) {
        this.offset = offset;
    }

    public int getPageSize() {
        return pageSize;
    }
}
